home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-06-21 | 36.8 KB | 1,684 lines |
-
- Include "equ.h"
- Include "impequ.h"
-
- SECTION IFF,CODE,PUBLIC
-
- ***************************************************
- *** ***
- ***************************************************
- dumbentry:
- clr.l d0
- rts
-
- dc.l "IMPP" ; magik number for pic import
- dc.w 200
- dc.l 0
-
- table: dc.l 0
- dc.l name,special,check,IFF
-
-
- *****************************
- * Is it really IFF ILBM? *
- *****************************
- check: move.l table,a0
- move.l buff1(a0),a1
- move.l (a1),a1
- cmp.l #"FORM",(a1)
- bne never
- cmp.l #"ILBM",8(a1)
- beq right
- cmp.l #"ACBM",8(a1)
- bne never
- bra right
-
-
-
- ***********************************
- *** ***
- ***********************************
- IFF: move.l sp,savesp
- clr.l rtable
- clr.l gtable
- clr.l btable
- clr.l palhndl
- clr.l ctblptr
- clr.b flag
-
- move.l table,a0
- move.l f_openr(a0),a0
- jsr (a0)
- beq rrts
-
- move.l table,a0
- move.l spclnum(a0),a0
- cmp.w #1,(a0)
- beq impobj
-
-
- *********************************
- * *
- *********************************
- imppic: move.l table,a0
- move.l p_open(a0),a0
- jsr (a0)
- beq rrts
-
- bsr getpicinfo
-
- move.l table,a4
- move.l cwptr(a4),a4 ;ptr to window handle
- move.l (a4),a4 ;window handle
- move.l (a4),a4 ;ptr to window structure
-
- lea pic,a0
- move.w pc_Type(a0),pi_Type(a4)
- move.w pc_SFreq(a0),pi_SFreq(a4)
- move.w pc_SAngle(a0),pi_SAngle(a4)
- move.w pc_SSpot(a0),pi_SSpot(a4)
- move.l pc_SMap(a0),pi_SMap(a4)
- move.l pc_SMap+4(a0),pi_SMap+4(a4)
- move.w pc_XDpi(a0),pi_XDpi(a4)
- move.w pc_YDpi(a0),pi_YDpi(a4)
- move.w pc_W(a0),pi_W(a4)
- move.w pc_H(a0),pi_H(a4)
- move.w pc_Width(a0),pi_Width(a4)
- move.w pc_BitPln(a0),pi_BitPln(a4)
- move.w pc_Palet(a0),pi_Palet(a4)
-
- move.w pi_Palet(a4),d1
- mulu #pl_Sizeof,d1
- move.w pi_Width(a4),d0
- mulu pi_BitPln(a4),d0
- mulu pi_H(a4),d0
- add.l d1,d0 ;size of bitmap +( 4 words * #colors)
-
- clr.w d1
- clr.w d2
- move.l table,a0
- move.l m_alloc(a0),a0
- jsr (a0)
- beq abortpic
-
- move.l table,a3
- move.l cwptr(a3),a3
- move.l (a3),a3
- move.l (a3),a3
- move.l a0,pi_Ptr(a3)
- move.l (a0),a4
- move.l a4,picptr
-
- bsr putcolor
-
- btst #6,flag ;is this an ACBM picture?
- beq ip1 ;no
- bsr putACBM
- bra ip2
- ip1: bsr putILBM
-
- ip2: move.l table,a0
- move.l p_close(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
-
- abortpic:
- move.l table,a0
- move.l p_abort(a0),a0
- jsr (a0)
-
- abort0: move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
-
- *********************************
- * *
- *********************************
- impobj: move.l table,a0
- move.l o_open(a0),a0
- jsr (a0)
- beq abort0
-
- bsr getpicinfo
-
- move.b #tpic,object+ob_Type
- clr.l object+ob_Left
- clr.l object+ob_Top
-
- move.w pic+pc_W,d1
- move.l #7200,d0
- bsr Mulu1632
- move.w pic+pc_XDpi,d2
- bsr Divu1648
- move.l d0,object+ob_Right
-
- move.w pic+pc_H,d1
- move.l #7200,d0
- bsr Mulu1632
- move.w pic+pc_YDpi,d2
- bsr Divu1648
- move.l d0,object+ob_Bottom
-
- clr.b object+ob_Flag
- clr.w object+ob_Slant
- clr.w object+ob_Twist
- move.w #50,object+ob_LWidth ;1 point line
- clr.b object+ob_LType ;no line
- move.b #1,object+ob_LColor ;black line
- clr.b object+ob_FType ;no fill
- move.b #1,object+ob_FColor ;black fill
- clr.b object+ob_LBegin
- clr.b object+ob_LEnd
- move.w #900,object+ob_HStandOff ;1/8 inch
- move.w #900,object+ob_VStandOff ;1/8 inch
-
- move.l table,a1
- move.l o_obj(a1),a1
- lea object,a0
- jsr (a1)
- beq abortobj
-
- move.w pic+pc_Width,d0
- mulu pic+pc_BitPln,d0
- mulu pic+pc_H,d0
- move.w pic+pc_Palet,d1
- mulu #pl_Sizeof,d1
- add.l d1,d0
- add.l #pc_Sizeof,d0
-
- move.l table,a0
- move.l o_malloc(a0),a0
- jsr (a0)
- beq abortobj
-
- lea pic,a1
- clr.l pc_DPtr(a1)
- clr.w pc_DScale(a1)
- move.w pc_Palet(a1),d0
- mulu #pl_Sizeof,d0
- add.l #pc_Sizeof,d0
- move.l d0,pc_Ptr(a1)
-
- move.w #pc_Sizeof/2-1,d0
- oppic1: move.w (a1)+,(a0)+
- dbf d0,oppic1
- move.l a0,picptr
-
- bsr putcolor
- btst #6,flag
- beq io1
- bsr putACBM
- bra io2
- io1: bsr putILBM
-
- io2: move.l table,a0
- move.l o_close(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
-
- abortobj:
- move.l table,a0
- move.l o_abort(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
-
- *********************************
- * *
- *********************************
- getpicinfo:
- lea pic,a0
- move.w #pc_Sizeof-1,d0
- gpi1: clr.b (a0)+
- dbra d0,gpi1
-
- move.w #-1,pic+pc_SFreq
- move.w #-1,pic+pc_SAngle
-
- clr.b flag
- clr.l palhndl
- clr.l vport
-
- bsr pgetl ; "FORM"
- bsr pgetl ; length of form
- move.l d0,length
- bsr pgetl ; "ILBM"
- sub.l #4,length
- cmp.l #"ILBM",d0
- beq getchunk
- bset #6,flag ;set the ACBM flag
-
- getchunk:
- bsr pgetl ;get chunk type in temp (CMAP, BODY, etc.)
- move.l d0,temp
- bsr pgetl ;get chunk length in clength
- move.l d0,clength
- beq getchunk ;skip 0 length chunk
- sub.l #8,length ;sub 8 from length of file left
- move.l temp,d0
-
- lea chunks-4,a0 ;get address of chunk table
- move.w numchunks,d1 ;number of chunks in table
-
- gc1: lea 4(a0),a0 ;get address of next chunk type
- cmp.l (a0)+,d0
- dbeq d1,gc1 ;loop until end of table or a match
-
- tst.l (a0) ;did i find one? or is it the last one (BODY)
- beq gc2 ;no
-
- move.l (a0),a0 ;get address of routine to use for this chunk
- jsr (a0) ;do it
-
- tst.l length ;is there any data left in the file?
- bne getchunk ;yes
- bra errrts ;no - so get out
-
- gc2: btst #0,flag ;did i find a BMHD?
- beq errrts ;no - so get out
-
- btst #6,flag ;is this an ACBM picture?
- bne rrts ;yes
-
- btst #3,flag ;is this a Digi-View picture?
- bne rrts ;yes!
-
- btst #4,flag ;is this a dynamic hires picture?
- bne rrts ;yes!
-
- btst #2,flag ;did i find a CLUT?
- bne rrts ;yes!
-
- ;btst #1,flag ;did i find a CMAP?
- ;beq errrts ;no - so don't load image
-
- rrts: rts ;everything is OK
-
-
- *********************************
- * *
- *********************************
- bmhd: bset #0,flag ; found a BMHD
-
- bsr pgetw
- move.w d0,pc_W+pic ; width in pixels
- add.w #15,d0
- lsr.w #3,d0
- bclr #0,d0
- move.w d0,pc_Width+pic ; width in bytes (even)
-
- bsr pgetw
- move.w d0,pc_H+pic ; height in pixels
-
- mulu pc_Width+pic,d0
- move.l d0,planesize
-
- bsr pgetl ; skip x,y
-
- bsr pget ; number of bitplanes
- clr.w pic+pc_BitPln
- move.b d0,pic+pc_BitPln+1
- move.w pic+pc_BitPln,truebitpln
-
- btst #6,flag ;is this a ACBM picture?
- beq bmhd0 ;no
- cmp.w #32,pic+pc_BitPln ;is it a toaster file?
- bne bmhd0 ;no
- move.w #24,pic+pc_BitPln ;if yes then set it to 24 bitplanes
-
- bmhd0: bsr pget
- bsr pget ; type of compression
- move.b d0,compression
-
- bsr pget ; pad
- bsr pgetw ; transparent color
-
- bsr pgetw ;skip the XAspect & YAspect
- bsr pgetl ;skip the pageWidth and pageHeight
-
- bmhd01: move.w #65,pc_XDpi+pic ;default to 640 x 400
- move.w #55,pc_YDpi+pic
-
- cmp.w #320,pc_W+pic
- bne bmhd1
-
- move.w #32,pc_XDpi+pic
-
- bmhd1: cmp.w #200,pc_H+pic
- bne bmhd2
-
- move.w #27,pc_YDpi+pic
-
- bmhd2: cmp.w #800,pc_H+pic
- bcc bmhd2a
-
- cmp.w #1000,pc_W+pic
- bcs bmhd3
-
- bmhd2a: move.w #300,pc_XDpi+pic
- move.w #300,pc_YDpi+pic
-
- bmhd3: move.l table,a0
- move.l spclname(a0),a0
- lea 4(a0),a0
- move.w -2(a0),d0
- clr.b 0(a0,d0.w)
- lea dpistr1,a1
- lea dpistr2,a2
-
- bmh3a: move.b (a0)+,d0
- move.b (a1)+,d1
- cmp.b d0,d1
- bne bmh3ab
- tst.b (a1)
- bne bmh3a
- bra bmh3ac
-
- bmh3ab: move.b (a2)+,d1
- cmp.b d0,d1
- bne bmh3b
- tst.b (a2)
- bne bmh3a
-
- bmh3ac: bset #5,flag ;set resolution override flag
- bsr getnum
- move.w d0,pc_XDpi+pic
- bsr getnum
- move.w d0,pc_YDpi+pic
-
- bmh3b: clr.b truecolor
-
- cmp.w #12,truebitpln
- bcs bmhd4
-
- ;cmp.w #18,pc_BitPln+pic
- ;beq bmhd3c
- ;cmp.w #21,pc_BitPln+pic
- ;beq bmhd3c
- ;cmp.w #24,pc_BitPln+pic
- ;bne bmhd4
-
- move.b #1,truecolor
- clr.w pc_Palet+pic
- move.w #PC_RGB,pc_Type+pic
- bra adjlen
-
- bmhd4: move.w #PC_PALET,pc_Type+pic
- move.w pc_BitPln+pic,d0
- moveq #1,d1
- lsl.w d0,d1
- move.w d1,pc_Palet+pic
-
- move.l vport,d0
- btst #11,d0
- beq bmhd5
-
- move.w #12,pc_BitPln+pic
- clr.w pc_Palet+pic
- move.w #PC_RGB,pc_Type+pic
-
- bmhd5: cmp.l #20,clength
- beq adjlen
- sub.l #20,clength
- sub.l #20,length
- bra skip
-
-
- *********************************
- * *
- *********************************
- camg: bsr pgetl
- move.l d0,vport
-
- btst #5,flag ;override the resolution?
- bne camg2 ;yes
-
- btst #15,d0 ;is it HIRES (640)
- bne camg1 ;yes!
- move.w #32,pic+pc_XDpi
-
- camg1: btst #2,d0 ;is it interlaced?
- bne camg2 ;yes!
- move.w #27,pic+pc_YDpi
-
- camg2: btst #0,flag ;did i find a BMHD before this?
- beq adjlen ;no
-
- btst #11,d0 ;is it a HAM picture?
- beq adjlen ;no
- move.w #12,pc_BitPln+pic ;convert HAM to 12 bit picture
- clr.w pc_Palet+pic
- move.w #PC_RGB,pc_Type+pic
- bra adjlen
-
-
- ***********************************
- *** ***
- ***********************************
- clut:
- bsr pgetl ;get clut type (1=r, 2=g, 3=b, 0,4-7 skip)
- subq.l #4,length
-
- clut1: cmp.l #1,d0 ;is it the red table?
- bne clut2 ;no
- lea rtable,a4 ;get the pointer to the red table into a4
- bra clut5
-
- clut2: cmp.l #2,d0 ;is it the green table?
- bne clut3 ;no
- lea gtable,a4 ;get the pointer to the green table into a4
- bra clut5
-
- clut3: cmp.l #3,d0 ;is it the blue table
- bne clut4
- lea btable,a4 ;get the pointer to the blue table into a4
- bra clut5
-
- clut4: subq.l #4,clength ;take off for the data i just read
- bra skip ;skip will rts for me
-
- clut5: bsr pgetl ;skip the reserved long word
- subq.l #4,length
- subq.l #4,clength
-
- move.l a4,-(sp) ;save it
- bset #2,flag ;yes i found a CLUT! (r, g, or b)
- move.w #256,d0 ;length of table is always 256
- clr.l d1 ;allocate memory for table data
- clr.l d2
- move.l table,a0
- move.l m_alloc(a0),a0
- jsr (a0)
- bne clut6
-
- move.l (sp)+,a4
- move.l #0,(a4) ;clear table pointer
- bra skip ;skip the rest
-
- clut6: move.l (sp)+,a4
- move.l a0,(a4) ;store memory handle into table pointer
- move.l (a0),a4 ;a4 = address of data
- move.w #256,temp
-
- clut7: bsr pget ;get a byte into d0
- move.b d0,(a4)+
- subq.w #1,temp
- bne clut7
-
- sub.l #256,length
- rts
-
-
- *********************************
- * *
- *********************************
- cmap: bset #1,flag ; found a CMAP
-
- tst.b truecolor
- bne cmaptc
-
- move.l clength,d0
- divu #3,d0 ; # of cmap entries
- move.w d0,temp
- move.l d0,d1
- swap d1
- move.w d1,cmapleftover
- mulu #pl_Sizeof,d0
- jsr allocpalet
-
- getentry:
- bsr pget ; red
- and.w #$ff,d0
- mulu #65535,d0
- divu #240,d0
- move.w d0,(a4)
- bsr pget ; green
- and.w #$ff,d0
- mulu #65535,d0
- divu #240,d0
- move.w d0,2(a4)
- bsr pget ; blue
- and.w #$ff,d0
- mulu #65535,d0
- divu #240,d0
- move.w d0,4(a4)
-
- move.w (a4)+,d0
- move.w (a4)+,d1
- move.w (a4)+,d2
- mulu #19661,d0
- mulu #38666,d1
- mulu #7209,d2
- add.l d1,d0
- add.l d2,d0
- swap d0
- cmp.w #$8000,d0
- bcc ge1
- moveq #1,d0
- bra ge2
- ge1: moveq #0,d0
- ge2: move.w d0,(a4)+ ; black
- sub.w #1,temp
- bne getentry
-
- tst.w cmapleftover
- beq ge4
- ge3: bsr pget
- subq.w #1,cmapleftover
- bne ge3
- ge4: bra adjlen
-
- cmaptc: move.l clength,d0
- move.l d0,temp
- bsr allocpalet
-
- cmtc1: bsr pget
- move.b d0,(a4)+
- sub.l #1,temp
- bne cmtc1
- bra adjlen
-
-
- ***********************************
- *** ***
- ***********************************
- ctbl:
- bset #4,flag ;this is a dynamic hires/ham picture!
- clr.l ctblptr
-
- btst #1,flag ;did i find a CMAP before
- beq ctbl0 ;no
-
- move.l palhndl,a0 ;if yes, then delete it
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
- bclr #1,flag
- clr.w pc_Palet+pic
- move.w #12,pic+pc_BitPln
- move.w #PC_RGB,pic+pc_Type
-
- ctbl0: move.l clength,d0
- clr.l d1
- clr.l d2
- move.l table,a0
- move.l m_alloc(a0),a0
- jsr (a0)
- bne ctbl1
-
- bra errrts ;get out
-
- ctbl1: move.l a0,ctblptr
- move.l (a0),a0
- move.l a0,temppal ;save incase this is a dynamic HAM picture
- move.l clength,d1
- sub.l d1,length ;adjust file length down
-
- ctbl2: move.l a0,-(sp)
- move.l d1,-(sp)
- bsr pget
- move.l (sp)+,d1
- move.l (sp)+,a0
- move.b d0,(a0)+
- subq.l #1,d1
- bne ctbl2
-
- bsr fakepal ;set up a fake palette for later
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- dgvw:
- bset #3,flag ;this is a digi-view picture!
- bsr skip ;skip the data
- bsr fakepal ;set up a "fake" palette for later
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- fakepal:
- move.w #768,d0 ;length of table is always 768 (256*3)
- clr.l d1 ;allocate memory for table data
- clr.l d2
- move.l table,a0
- move.l m_alloc(a0),a0
- jsr (a0)
- bne fkpl1
-
- clr.l palhndl ;clear table pointer - (a4) ?????
- rts
-
- fkpl1: move.l a0,palhndl ;store memory handle into table pointer
- move.l (a0),a4 ;a4 = address of data
- move.b #0,temp ;for the red data
-
- fkpl2: move.b temp,(a4)+
- add.b #1,temp
- cmp.b #255,temp
- bne fkpl2
-
- move.b #0,temp ;for the green data
-
- fkpl4: move.b temp,(a4)+
- add.b #1,temp
- cmp.b #255,temp
- bne fkpl4
-
- move.b #0,temp ;for the blue data
-
- fkpl6: move.b temp,(a4)+
- add.b #1,temp
- cmp.b #255,temp
- bne fkpl6
-
- rts
-
- ***********************************
- *** ***
- ***********************************
- allocpalet:
- move.l table,a1
- tst.l palhndl
- beq apal1
-
- move.l palhndl,a0
- move.l m_realloc(a1),a1 ; already had a color map
- jsr (a1)
- move.l palhndl,a4
- move.l (a4),a4
- rts
-
- apal1: clr.w d1
- clr.w d2
- move.l m_alloc(a1),a1
- jsr (a1) ; allocate memory for the color map
- move.l a0,palhndl
- move.l (a0),a4
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- adjlen: move.l clength,d0
- btst #0,d0
- beq al1
- bsr pget
- move.l clength,d0
- add.l #1,d0
-
- al1: sub.l d0,length
- rts
-
-
- ***********************************
- ** **
- ***********************************
- getnum: moveq #0,d0
- gn1: move.b (a0)+,d1
- sub.b #"0",d1
- bcs gn2
- cmp.b #10,d1
- bcc gn2
- and.w #$ff,d1
- mulu #10,d0
- add.w d1,d0
- bra gn1
-
- gn2: rts
-
- ***********************************
- *** ***
- ***********************************
- skip: move.l clength,d0
- add.l #1,d0
- bclr #0,d0
- sub.l d0,length
-
- sk1: move.l d0,-(sp)
- bsr pgetw
- move.l (sp)+,d0
- sub.l #2,d0
- bgt sk1
- rts
-
-
- *********************************
- * *
- *********************************
- pgetl: move.l table,a0
- move.l f_getl(a0),a0
- jsr (a0)
- beq errrts
- rts
-
- *********************************
- * *
- *********************************
- pgetw: move.l table,a0
- move.l f_getw(a0),a0
- jsr (a0)
- beq errrts
- rts
-
- *********************************
- * *
- *********************************
- pget: move.l table,a0
- move.l f_get(a0),a0
- jsr (a0)
- beq errrts
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- errrts: tst.l palhndl
- beq er1
- move.l palhndl,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- er1: tst.l rtable
- beq er2
- move.l rtable,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- er2: tst.l gtable
- beq er3
- move.l gtable,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- er3: tst.l btable
- beq er4
- move.l btable,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- er4: tst.l ctblptr
- beq er5
- move.l ctblptr,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- er5: move.l savesp,sp
-
- move.l table,a0
- move.l spclnum(a0),a0
- cmp.w #1,(a0)
- beq abortobj
- bra abortpic
-
- ;rts
-
-
- ***********************************************************
- *** ***
- ***********************************************************
- putcolor:
- move.w pc_Palet+pic,d1
- mulu #pl_Sizeof,d1
- beq rrts ;incase no pal exist
-
- move.l picptr,a0
- move.l palhndl,a1
- move.l (a1),a1
- bra pc2
- pc1: move.b (a1)+,(a0)+
- pc2: dbf d1,pc1
- move.l a0,picptr
-
- rts
-
-
- ***********************************************************
- *** ***
- ***********************************************************
- putILBM:
- move.l vport,d0
- btst #11,d0 ;is this a ham picture?
- bne pp09 ;yes
-
- btst #4,flag ;is this a dynamic hires picture?
- beq pp00
-
- move.w #4,truebitpln ;read in as a 4bit picture
-
- pp00: btst #2,flag ;is this a CLUT picture?
- beq pp0
-
- bsr cluttopal ;change clut into a palette
-
- pp0: btst #3,flag ;is this is digi-view (RGB) picture
- beq pp09 ;no
- cmp.w #21,truebitpln ;is this a 21 bit rgb picture?
- bne pp09 ;no
-
- move.w pic+pc_H,theight
- move.w #7,bitplanes
- move.l picptr,a4
- move.l a4,pptr
-
- move.l planesize,d0
- lsl.l #3,d0
- sub.l planesize,d0 ;multiply by seven
- move.l d0,planeoffset
-
- add.l d0,a4
- sub.l planesize,a4
- move.l a4,picptr
- move.l a4,pptr2
- move.w #3,ccount
-
- pp01: bsr getrow
- add.l planeoffset,a4
- sub.w #1,ccount ;do the x row for each color (rgb)
- bne pp01
-
- move.w #3,ccount ;reset color count
- move.l picptr,a4
- sub.l planesize,a4 ;move to next plane back
- move.l a4,picptr
- sub.w #1,bitplanes
- bne pp01
-
- move.l pptr2,a4
- add.w pic+pc_Width,a4
- move.l a4,pptr2
- move.l a4,picptr
- move.w #3,ccount
- move.w #7,bitplanes
-
- sub.w #1,theight
- bne pp01
-
- bra pp2
-
- pp09: move.w truebitpln,bitplanes
- move.w pc_H+pic,theight
- move.l picptr,a4
- move.l a4,pptr
-
- pp1: bsr getrow ;put a row into the amiga bitmap
- add.l planesize,a4 ;one for each bit plane
- sub.w #1,bitplanes
- bne pp1
-
- move.w truebitpln,bitplanes ;get next row
- move.l picptr,a4
- add.w pc_Width+pic,a4
- move.l a4,picptr
- sub.w #1,theight
- bgt pp1
-
- *
- * possibly convert into ham
- *
- pp2: move.l vport,d0 ;is it a HAM picture?
- btst #11,d0
- beq notham ;no!
-
- clr.w curcolor
- move.w pc_H+pic,theight
- pp3: bsr unhamrow ;change HAM into 12 bit data
- move.l pptr,a0
- add.w pc_Width+pic,a0
- move.l a0,pptr
- subq.w #1,theight
- bhi pp3
- bra nottrue
- *
- * possible needs a truecolor lookup
- *
- notham: btst #4,flag ;is it a dynamic hires picture?
- beq pp31 ;no
-
- bsr undynam ;change from dynamic hires into 12bit
-
- pp31: tst.b truecolor
- beq nottrue
-
- move.w pc_H+pic,theight
- pp4: bsr truecolorlookup
- move.l pptr,a0
- add.w pc_Width+pic,a0
- move.l a0,pptr
- subq.w #1,theight
- bhi pp4
-
- nottrue:
- tst.l palhndl ;clean up memory
- beq pp5
- move.l palhndl,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pp5: tst.l rtable
- beq pp6
- move.l rtable,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pp6: tst.l gtable
- beq pp7
- move.l gtable,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pp7: tst.l btable
- beq pp8
- move.l btable,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pp8: tst.l ctblptr
- beq pp9
- move.l ctblptr,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pp9: bra adjlen ;will rts for me
-
-
- *******************************************
- *** ***
- *******************************************
- putACBM:
- clr.l d0
- move.w pic+pc_Width,d0
- mulu pic+pc_H,d0
- move.l d0,planesize
-
- cmp.w #6,pic+pc_BitPln
- bcc pa1
-
- mulu pic+pc_BitPln,d0
- move.l picptr,a0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
- bra pa9
-
- pa1: lsl.l #1,d0 ;skip the first 3 bitplanes
- add.l planesize,d0
- move.l picptr,a0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
-
- clr.l d1 ;red plane?
- move.l planesize,d0
- move.w pic+pc_BitPln,d1
- divu #3,d1
- mulu d1,d0
- move.l picptr,a0
- add.l d0,a0
- add.l d0,a0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
-
- move.l planesize,d0
- lsl.l #1,d0 ;skip the next 2 bitplanes
- move.l picptr,a0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
-
- clr.l d1 ;green planes?
- move.l planesize,d0
- move.w pic+pc_BitPln,d1
- divu #3,d1
- mulu d1,d0
- move.l picptr,a0
- add.l d0,a0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
-
- move.l planesize,d0
- lsl.l #1,d0 ;skip the next 2 bitplanes
- move.l picptr,a0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
-
- clr.l d1 ;blue planes?
- move.l planesize,d0
- move.w pic+pc_BitPln,d1
- divu #3,d1
- mulu d1,d0
- move.l picptr,a0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
-
- pa9: rts
-
- *******************************************
- *** ***
- *******************************************
- unhamrow:
- btst #4,flag ;is this a dynamic HAM picture?
- beq uhr0
- move.l temppal,a1
- move.l a1,a2
- add.l #32,a2
- move.l a2,temppal ;set temppal to next pal for row
- bra uhr01
-
- uhr0: move.l palhndl,a1
- move.l (a1),a1
-
- uhr01: move.w pc_Width+pic,d0
- lsl.w #3,d0
- move.w d0,twidth
- move.l pptr,a4
- moveq #7,d7
- move.w (a1),curcolor ;set the starting color to the background (0)
-
- uhr1: move.l a4,a2
- move.l a4,a3
- moveq #0,d1
- moveq #0,d0
-
- btst d7,(a2)
- beq uhr10
- bset #0,d0
- uhr10: add.l planesize,a2
- btst d7,(a2)
- beq uhr11
- bset #1,d0
- uhr11: add.l planesize,a2
- btst d7,(a2)
- beq uhr12
- bset #2,d0
- uhr12: add.l planesize,a2
- btst d7,(a2)
- beq uhr13
- bset #3,d0
- uhr13: add.l planesize,a2
- btst d7,(a2)
- beq uhr14
- bset #2,d1
- uhr14: add.l planesize,a2
- btst d7,(a2)
- beq uhr15
- bset #3,d1
-
- uhr15: lea ham,a0
- jsr 0(a0,d1.w)
-
- move.w curcolor,d0
-
- move.w #0,d1
- move.w #11,d2
- uhr20: btst d1,d0
- beq uhr21
- bset d7,(a3)
- bra uhr22
- uhr21: bclr d7,(a3)
- uhr22: add.l planesize,a3
- addq.w #1,d1
- dbf d2,uhr20
-
- dbf d7,uhr2
- moveq #7,d7
- addq.l #1,a4
- uhr2: sub.w #1,twidth
- bhi uhr1
- rts
-
- ham: bra.w selpal
- bra.w selblue
- bra.w selred
- bra.w selgreen
-
- selpal: btst #4,flag ;is it a dynamic HAM picture?
- beq selp1
- lsl.w #1,d0
- move.w 0(a1,d0.w),curcolor
- rts
-
- selp1: lsl.w #3,d0
- move.w pl_Red(a1,d0.w),d1
- mulu #15,d1
- divu #65535,d1
- and.w #$f,d1
- lsl.w #8,d1
-
- move.w pl_Green(a1,d0.w),d2
- mulu #15,d2
- divu #65535,d2
- and.w #$f,d2
- lsl.w #4,d2
- or.w d2,d1
-
- move.w pl_Blue(a1,d0.w),d2
- mulu #15,d2
- divu #65535,d2
- and.w #$f,d2
- or.w d2,d1
-
- move.w d1,curcolor
- rts
-
- selblue:
- move.w curcolor,d1
- and.w #$ff0,d1
- or.w d0,d1
- move.w d1,curcolor
- rts
-
- selgreen:
- move.w curcolor,d1
- and.w #$f0f,d1
- lsl.w #4,d0
- or.w d0,d1
- move.w d1,curcolor
- rts
-
- selred:
- move.w curcolor,d1
- and.w #$0ff,d1
- lsl.w #8,d0
- or.w d0,d1
- move.w d1,curcolor
- rts
-
- *******************************************
- *** ***
- *******************************************
- truecolorlookup:
- move.w pc_Width+pic,d0
- lsl.w #3,d0
- move.w d0,twidth
- move.l pptr,a4
- moveq #7,d7
-
- move.w truebitpln,d3
- divu #3,d3
- subq.w #1,d3
- move.w d3,numplane
-
- tcl1: move.l a4,a2
- move.l a4,a3
-
- moveq #0,d0 ;red
- moveq #0,d1 ;green
- moveq #0,d2 ;blue
-
- move.w numplane,d3 ;get the red plane's value
-
- tcl2: lsr.b #1,d0
- btst d7,(a2)
- beq tcl3
- bset #7,d0
- tcl3: add.l planesize,a2
- dbf d3,tcl2
-
- move.w numplane,d3 ;get the green planes's value
-
- tcl4: lsr.b #1,d1
- btst d7,(a2)
- beq tcl5
- bset #7,d1
- tcl5: add.l planesize,a2
- dbf d3,tcl4
-
- move.w numplane,d3 ;get the blue plane's value
-
- tcl6: lsr.b #1,d2
- btst d7,(a2)
- beq tcl7
- bset #7,d2
- tcl7: add.l planesize,a2
- dbf d3,tcl6
-
- move.w #7,d3
- sub.w numplane,d3
- beq tcl8
-
- lsr.b d3,d0
- lsr.b d3,d1
- lsr.b d3,d2
-
- tcl8: tst.l palhndl
- beq tcl80
-
- move.l palhndl,a1
- move.l (a1),a1
- move.b 0(a1,d0.w),d0 ;red lookup
- lea 256(a1),a1
- move.b 0(a1,d1.w),d1 ;green lookup
- lea 256(a1),a1
- move.b 0(a1,d2.w),d2 ;blue lookup
-
- tcl80: btst #3,flag ;is this a digi-view picture?
- beq tcl9 ;no - needs no color adjusting
-
- cmp.w #21,truebitpln ;is this a 21 bit digi view picture?
- beq tcl81 ;nope
- cmp.w #24,truebitpln ;is this a 24 bit digi view picture?
- bne tcl9 ;nope
-
- lea contrast24,a1 ;get the contrast adjusted values
- move.b 0(a1,d0.w),d0
- move.b 0(a1,d1.w),d1
- move.b 0(a1,d2.w),d2
- bra tcl9
-
- tcl81: lea contrast21,a1 ;get the contrast adjusted values
- move.b 0(a1,d0.w),d0
- move.b 0(a1,d1.w),d1
- move.b 0(a1,d2.w),d2
-
- tcl9: move.w #0,d3 ;copy blue back
- move.w numplane,d4
-
- tcl10: btst d3,d2
- beq tcl11
- bset d7,(a3)
- bra tcl12
- tcl11: bclr d7,(a3)
- tcl12: add.l planesize,a3
- addq.w #1,d3
- dbf d4,tcl10
-
- move.w #0,d3 ;copy green back
- move.w numplane,d4
-
- tcl13: btst d3,d1
- beq tcl14
- bset d7,(a3)
- bra tcl15
- tcl14: bclr d7,(a3)
- tcl15: add.l planesize,a3
- addq.w #1,d3
- dbf d4,tcl13
-
- move.w #0,d3 ;copy red back
- move.w numplane,d4
-
- tcl16: btst d3,d0
- beq tcl17
- bset d7,(a3)
- bra tcl18
- tcl17: bclr d7,(a3)
- tcl18: add.l planesize,a3
- addq.w #1,d3
- dbf d4,tcl16
-
-
- dbf d7,tcl20
- moveq #7,d7
- addq.l #1,a4
- tcl20: sub.w #1,twidth
- bhi tcl1
- rts
-
-
- *******************************************
- *** ***
- *******************************************
- getrow: move.l a4,temp
- move.w pc_Width+pic,twidth
-
- tst.b compression
- beq nocomp
- cmp.b #1,compression
- bne errrts
-
- gr1: tst.w twidth
- beq grtn
- bsr pget
- cmp.b #$80,d0
- beq gr1
-
- tst.b d0
- bmi gr3
- move.b d0,temp1
- gr2: bsr pget
- move.b d0,(a4)+
- sub.w #1,twidth
- sub.b #1,temp1
- bge gr2
- bra gr1
-
- gr3: clr.w temp1
- neg.b d0
- move.b d0,temp1+1
- bsr pget
- move.w temp1,d1
- gr4: move.b d0,(a4)+
- sub.w #1,twidth
- dbra d1,gr4
- bra gr1
-
- nocomp: bsr pget
- move.b d0,(a4)+
- sub.w #1,twidth
- bne nocomp
-
- grtn: move.l temp,a4
- rts
-
-
- *******************************************
- *** ***
- *******************************************
- cluttopal:
- move.w #768,d0
- clr.l d1
- clr.l d2
- move.l table,a0
- move.l m_alloc(a0),a0
- jsr (a0)
- beq errrts ;can i do this?
-
- move.l a0,palhndl
- move.l (a0),a0
- move.l rtable,a1
- move.l (a1),a1
- move.w #255,d0
-
- clpt1: move.b (a1)+,(a0)+
- dbf d0,clpt1
-
- move.l #255,d0
- move.l gtable,a1
- move.l (a1),a1
-
- clpt2: move.b (a1)+,(a0)+
- dbf d0,clpt2
-
- move.l #255,d0
- move.l btable,a1
- move.l (a1),a1
-
- clpt3: move.b (a1)+,(a0)+
- dbf d0,clpt3
-
- rts
-
- ***********************************
- *** ***
- ***********************************
- undynam:
- move.l ctblptr,a0
- move.l (a0),a0 ;a0 = address of palettes
- move.w pic+pc_H,d0 ;d0 = number of rows
- subq.w #1,d0
- move.w pic+pc_Width,d4 ;d4 = width of picture in bytes
- subq.w #1,d4
- move.l pptr,a1 ;a1 = pointer into amiga bitmap
- moveq #7,d1 ;d1 = bit counter into amiga bitmap
-
- undy1: clr.w d2 ;d2= pixel value
- moveq #0,d3 ;d3 = counter
- move.l a1,a2 ;a2 = temp hold for a1
-
- undy2: btst d1,(a2) ;get 4bit value from amiga bitmap
- beq undy3
- bset d3,d2
- undy3: add.l planesize,a2
- addq.w #1,d3
- cmp.w #4,d3
- bcs undy2
-
- lsl.w #1,d2
- move.w 0(a0,d2.w),d2 ;get pixel value from palette
-
- move.l a1,a2
- moveq #0,d3 ;put 12bit value back
-
- undy4: btst d3,d2
- beq undy5
- bset d1,(a2)
- bra undy6
- undy5: bclr d1,(a2)
- undy6: add.l planesize,a2
- addq.w #1,d3
- cmp.w #12,d3
- bcs undy4
-
- dbf d1,undy1
- moveq #7,d1
- addq.l #1,a1
-
- dbf d4,undy1
- move.l pptr,a1
- add.w pic+pc_Width,a1
- move.l a1,pptr
- add.l #32,a0 ;move to next palette
- move.w pic+pc_Width,d4 ;reset width
-
- dbf d0,undy1
-
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- Mulu1632:
- move.l table,a0
- move.l mulu1632(a0),a0
- jmp (a0)
-
-
- ***********************************
- *** ***
- ***********************************
- Divu1648:
- move.l table,a0
- move.l divu1648(a0),a0
- jmp (a0)
-
-
- *******************************************************************
- *** called when the import routine choosen finds something ***
- *** wrong with the file loaded. ***
- *******************************************************************
- never: clr.w d0
- rts
-
- maybe: move.w #1,d0
- rts
-
- right: move.w #2,d0
- rts
-
-
- *************************************************************
- *************************************************************
- SECTION IFF,DATA,PUBLIC
-
- chunks: dc.l "BEAM",ctbl
- dc.l "BMHD",bmhd
- dc.l "CAMG",camg
- dc.l "CLUT",clut
- dc.l "CMAP",cmap
- dc.l "CTBL",ctbl
- dc.l "DGVW",dgvw
- dc.l "BODY",0
- dc.l "ABIT",0
- dc.l 0,skip
-
- numchunks:
- dc.w 9
-
-
- special:
- dc.w 2
- dc.l spcl1,spcl2
-
- vers: dc.b "$VER: "
- name: dc.b "IFF ILBM/ACBM v2.0.9",0
-
- spcl1: dc.b "Picture Window",0
- spcl2: dc.b "Object",0
-
- dpistr1: dc.b "dpi=",0
- dpistr2: dc.b "DPI=",0
-
- contrast21:
- dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- dc.b 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32
- dc.b 34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64
- dc.b 68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98
- dc.b 100,102,104,106,108,110,112,114,116,118,120,122,124,126,127,127
- dc.b 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127
- dc.b 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127
-
-
- contrast24:
- dc.b 0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5
- dc.b 6,6,6,7,7,7,8,8,8,9,9,9,10,10,10,11
- dc.b 11,11,12,12,12,13,13,13
- dc.b 14,14,14,15,15,15,16,16,18,20,22,24,26,28,30,32
- dc.b 34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64
- dc.b 68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98
- dc.b 100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130
- dc.b 132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162
- dc.b 164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194
- dc.b 196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226
- dc.b 228,230,232,234,236,238,240,242,246,248,250,252,254,255,255,255
- dc.b 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
- dc.b 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
- dc.b 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
- dc.b 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
- dc.b 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
- dc.b 255,255,255,255,255,255,255,255
-
-
- **************************************************************
- **************************************************************
- SECTION IFF,BSS,PUBLIC
- savesp: ds.l 1
- length: ds.l 1
- clength: ds.l 1
- temp: ds.l 1
- temp1: ds.w 1
- palhndl: ds.l 1
- picptr: ds.l 1
- pptr: ds.l 1
- planesize: ds.l 1
- twidth: ds.w 1
- theight: ds.w 1
- bitplanes: ds.w 1
- pic: ds.w pc_Sizeof/2
- object: ds.w ob_SizeOf/2
- compression: ds.b 1
- flag: ds.b 1
- vport: ds.l 1
- truebitpln: ds.w 1
- curcolor: ds.w 1
- truecolor: ds.w 1
- rtable: ds.l 1
- gtable: ds.l 1
- btable: ds.l 1
- xpage: ds.w 1
- ypage: ds.w 1
- ccount: ds.l 1
- planeoffset: ds.l 1
- pptr2: ds.l 1
- ctblptr: ds.l 1
- temppal: ds.l 1
- numplane: ds.w 1
- cmapleftover: ds.w 1
-
- ******************************* CHANGES ************************************
- ;
- ; version 2.0.9
- ;
- ; - removed support for extended BMHD (xdpi and ydpi), although it will
- ; still skip the extra chunk data if there is any.
- ;
- ; - added a version string
- ;
- ; - misc fixes for atari st
- ;
- ;
- ; version 2.0.8 (uploaded 4/19/91)
- ;
- ; - fixes bug when loading a picture with no cmap or clut tables
- ;
- ;
- ; version 2.0.7
- ;
- ; - handles an extended BMHD and uses the xdpi and ydpi info
- ;
- ;
- ; version 2.0.6 (uploaded 02/19/91)
- ;
- ; - now handles correctly 0 length chunks (nasty programs)
- ;
- ; - handles bad cmap chunk lengths (chunklength%3 != 0)
- ;
- ;
- ; version 2.0.5 (uploaded 1/16/91)
- ;
- ; - added support for IFF's without CMAPs (24 bit)
- ;
- ;
- ; version 2.0.4 (shipped with PgS 2.1 12/7/90)
- ;
- ; - added support for IFF ACBM files (video toaster)
- ;
- ;
- ; version 2.0.3 (uploaded 10/12/90)
- ;
- ; - adding color correction for digi view 24 bit files
- ;
- ;
- ; version 2.0.2 (uploaded 9/xx/90)
- ;
- ; - bug fix: now correctly handles the 'dpi=' option
- ;
- ; - supports images in 15 and 18 bit standard IFF format (deep ilbm)
- ; (this has not been tested - only works in theory)
- ;
- ; - supports the BEAM chunk as a CTBL chunk
- ;
- ; version 2.0.1
- ;
- ; - shipped with pagestream2.0
-